package yxy.game.sdk.shengye;

import org.apache.http.NameValuePair;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import yxy.apple.http.server.business.BusinessType;
import yxy.apple.logger.Logger;
import yxy.cherry.game.base.bean.SDKParm;
import yxy.cherry.game.base.bean.SdkParmEnum;
import yxy.game.bean.LoginOtherParm;
import yxy.game.login.Error;
import yxy.game.login.LoginModule;
import yxy.game.util.HttpHelper;
import yxy.game.util.HttpUtil;

@BusinessType(code = "LOGIN")
public class Login extends Sdk_shengye {

	static final Logger logger = Logger.create(Login.class);
	
	@Override
	public JSONObject handle(JSONObject request) throws Exception {
		JSONObject resultjson = new JSONObject();
		
//		请求参数：
//		参数名 	类型 	说明
//		openId 	string 	sdk返回的openid
//		channel string 	我⽅提供的⼩游戏key，可暴露在前端
		
		JSONObject datajson = request.getJSONObject("datajson");
		String ip = request.getString("ip");
		String openId = datajson.getString("openid");
		String channel = SDKParm.getSdkparmvalue(SdkParmEnum.shengye_gamekey);
		String adId = datajson.getString("adid");	//江湖验证用
		String subchannel = datajson.getString("subchannel");
		int system = datajson.getIntValue("system");
		
		
		JSONObject postjson = new JSONObject();
		postjson.put("openId", openId);
		postjson.put("channel", channel);
		
		logger.info("Sdk_shengye postjson:" + postjson);
	
		JSONObject syretjson = HttpUtil.response(chexklogin, 30000, postjson);	

		logger.info("Sdk_shengye retjson:" + syretjson);
		
//		返回参数：
//		参数名	 	类型 	说明
//		status 	 	string 	状态码
//		info 	 	string 	提⽰信息
//		openId   	string 	验证成功返回⽤户登录⽤的openid
//		realOpenId 	string 	⽤户真实openid。若⽤户为导包⽤户，会和请求参数中的openId字段不⼀致，否则为空
		
		if(syretjson == null || syretjson.size() == 0) {
			return result(resultjson, Error.Err_渠道登陆失败);
		}
		
		String status = syretjson.getString("status");
		if(!status.equals(loginsuccess)) {
			return result(resultjson, Error.Err_渠道登陆失败);
		}
		
		
		//江湖验证
		
//		参数名	必选	类型	说明
//		appID	是	string	平台分配的应用id
//		json	是	string	json字符串，结构见：json结构
//		ext	是	string	保留字段，json字符串，固定填写：{}
//		sign	是	string	签名，签名规则请看签名规则
		
//		json结构
//		参数名	必选	类型	说明
//		simpleCode	是	string	渠道值，固定为：MINIAPP
//		channelId	是	string	分包值，ios/and，表示ios或安卓
//		unionAppId	是	string	小程序appid
//		openUserId	是	string	小程序登录获取到的用户unionid/openid，如有unionid则填写unionid，否则填写openid
//		nickName	是	string	昵称，没有则传空字符串
//		adId	是	string	小程序买量广告id
		
		String channelId = "and";
		if(system == ios) {
			channelId = "ios";
		}
		
		JSONObject json = new JSONObject();
		json.put("simpleCode", "MINIAPP");
		json.put("channelId", channelId);
		json.put("unionAppId", SDKParm.getSdkparmvalue(SdkParmEnum.shengye_appid));			
		json.put("openUserId", openId);
		json.put("nickName", "");
		json.put("adId", adId);
		
		String appID = SDKParm.getSdkparmvalue(SdkParmEnum.shengye_jh_appid);
		String ext = "{}";

		//		签名规则
//		sign = md5 (appID + json + ext + OPENKEY);
//		//`OPENKEY`为平台分配。
		String signstr = appID + json + ext + SDKParm.getSdkparmvalue(SdkParmEnum.shengye_jh_openkey);  
		String sign = HttpUtil.getMD5(signstr).toLowerCase();
		
		JSONObject jhpostjson = new JSONObject();
		jhpostjson.put("appID", appID);
		jhpostjson.put("json", json);
		jhpostjson.put("ext", ext);
		jhpostjson.put("sign", sign);
		
		logger.info("jhpostjson " + jhpostjson);
		// 发送post请求
		String ret = "";
		try {				
			NameValuePair[] pair = HttpHelper.getValuePair(jhpostjson);
			ret = HttpHelper.doPost(jh_chexklogin, pair, 30000);
		} catch (Exception e) {
			e.printStackTrace();
		}
		logger.info("ret " + ret);

		if(ret == null || ret.equals("")) {
			return result(resultjson, Error.Err_渠道代码错误);
		}
		
		JSONObject jhretjson = JSON.parseObject(ret);

//		返回参数说明
//		参数名	类型	说明
//		statusCode	String	“200”：表示成功，其他值表示接口失败
//		message	String	接口失败时的描述
//		uid	long	平台用户uid
		
		String username = openId;
		String password = openId;
		
		String statusCode = jhretjson.getString("statusCode");
		if(!statusCode.contains(jh_success)) {
			return result(resultjson, Error.Err_渠道代码错误);
		}
		
		String platuid = jhretjson.getString("uid");
		if(username == null || username.equals("")) {
			return result(resultjson, Error.Err_渠道代码错误);
		}

		int clusterId = request.getInteger("clusterId");
		LoginOtherParm loginOtherParm = new LoginOtherParm(openId, platuid, adId, channelId, request.getString("invitecode"));
		loginOtherParm.setClusterId(clusterId);
		return new LoginModule().login(username, password, name(), subchannel, ip, loginOtherParm);
	}

	
	public JSONObject result(JSONObject result, Error errcode) {
		result.put("result", errcode.number());
		return result;
	}

}
